gtest_dep = dependency('gtest', main: true, disabler: true, required: false)
gmock_dep = dependency('gmock', disabler: true, required: false)
if not gtest_dep.found() or not gmock_dep.found()
    gtest_proj = import('cmake').subproject('googletest', required: false)
    if gtest_proj.found()
        gtest_dep = declare_dependency(
            dependencies: [
                dependency('threads'),
                gtest_proj.dependency('gtest'),
                gtest_proj.dependency('gtest_main'),
            ],
        )
        gmock_dep = gtest_proj.dependency('gmock')
    else
        assert(
            not get_option('tests').allowed(),
            'Googletest is required if tests are enabled',
        )
    endif
endif

test_yamls = ['test-empty-group', 'test-group-priority', 'test-led-priority']

test_sources = [
    '../manager/manager.cpp',
    '../manager/config-validator.cpp',
    '../utils.cpp',
]

foreach yaml : test_yamls
    gen_hpp = custom_target(
        yaml + '.hpp',
        command: [
            prog_python,
            meson.project_source_root() + '/scripts/parse_led.py',
            '--filename',
            meson.project_source_root() + '/test/config/' + yaml + '.yaml',
            '-o',
            meson.current_build_dir(),
            '--output-filename',
            yaml + '.hpp',
        ],
        output: yaml + '.hpp',
    )

    test_sources += [gen_hpp]
endforeach

tests = [
    'utest.cpp',
    'utest-led-json.cpp',
    'utest-group-priority.cpp',
    'utest-led-yaml-group-priority.cpp',
    'utest-led-yaml-led-priority.cpp',
    'utest-led-yaml-empty-group.cpp',
    'utest-config-validator.cpp',
]
if get_option('persistent-led-asserted').allowed()
    test_sources += ['../manager/serialize.cpp']
    tests += ['utest-serialize.cpp']
endif

foreach t : tests
    test(
        t,
        executable(
            t.underscorify(),
            t,
            test_sources,
            include_directories: ['..', '../manager'],
            dependencies: [gtest_dep, gmock_dep, deps],
        ),
        workdir: meson.current_source_dir(),
    )
endforeach
